.NET MAUI
1. 개요
1. 개요
.NET MAUI는 마이크로소프트가 개발한 크로스 플랫폼 GUI 프레임워크이다. 정식 명칭은 .NET Multi-platform App UI이며, .NET 플랫폼을 기반으로 한다. 이 프레임워크를 사용하면 개발자는 단일 코드베이스로 Windows, Android, iOS, macOS 운영체제를 위한 네이티브 사용자 인터페이스를 갖춘 애플리케이션을 빌드할 수 있다.
마이크로소프트는 2020년 5월 자사의 연례 개발자 컨퍼런스인 마이크로소프트 빌드 2020에서 .NET MAUI를 처음 공개했다. 이후 약 2년간의 프리뷰 기간을 거쳐 2022년 5월에 정식으로 릴리스되었다. 이 기술은 마이크로소프트가 인수한 Xamarin 프레임워크, 특히 Xamarin.Forms의 진화된 후속작으로, 기존 모바일 앱 개발 경험을 데스크톱 플랫폼까지 확장하는 것을 목표로 한다.
주요 목표는 다양한 플랫폼 간에 코드 재사용을 극대화하여 개발 효율성을 높이는 것이다. 이를 통해 기업과 개발자는 별도의 네이티브 앱 프로젝트를 여러 개 유지 관리하는 부담을 줄이고, 하나의 프로젝트에서 모든 대상 플랫폼을 관리할 수 있게 된다. 이는 소프트웨어 개발 생명 주기를 단축시키는 데 기여한다.
.NET MAUI는 C 샵과 F 샵을 포함한 .NET 언어들을 지원하며, Visual Studio와 Visual Studio Code 같은 마이크로소프트의 통합 개발 환경에서 공식적으로 개발 도구를 제공한다. 또한 명령줄 인터페이스를 통한 개발도 가능하여 개발 워크플로우의 유연성을 보장한다.
2. 역사
2. 역사
.NET MAUI의 역사는 마이크로소프트의 기존 크로스 플랫폼 프레임워크인 Xamarin.Forms의 진화 과정에서 시작된다. 마이크로소프트는 2020년 5월, 연례 개발자 컨퍼런스인 마이크로소프트 빌드 2020에서 .NET MAUI를 처음 공개했다. 이는 .NET 6의 통합된 다중 플랫폼 전략의 핵심 구성 요소로 발표되었다.
프레임워크는 약 2년간의 프리뷰 기간을 거쳐 2022년 5월에 정식으로 릴리스되었다. 이 정식 릴리스는 Visual Studio 2022 버전 17.3부터 공식 지원과 함께 이루어졌다. .NET MAUI는 Xamarin.Forms의 기술적 기반을 계승하면서도, 더 현대적인 .NET 플랫폼(.NET Core) 위에 재구축되었다. 이 과정에서 기존의 Xamarin.iOS와 Xamarin.Android는 각각 .NET for iOS와 .NET for Android로 명칭이 변경되어 .NET MAUI 생태계의 일부로 통합되었다.
마이크로소프트는 2024년부터 Xamarin에 대한 기술 지원을 종료할 예정이며, 개발자들에게 .NET MAUI로의 전환을 권장하고 있다. 이는 마이크로소프트의 크로스 플랫폼 GUI 개발 전략이 완전히 .NET MAUI로 통합되었음을 의미한다.
3. Xamarin.Forms와의 비교
3. Xamarin.Forms와의 비교
.NET MAUI는 Xamarin.Forms의 후속 프레임워크로, 크로스 플랫폼 앱 개발을 위한 마이크로소프트의 최신 접근 방식을 구현한다. 가장 큰 차이점은 프로젝트 구조에 있다. Xamarin.Forms는 Android, iOS, Windows 등 각 대상 플랫폼마다 별도의 프로젝트를 생성하고 공유 코드를 라이브러리로 관리하는 방식이었다. 반면 .NET MAUI는 단일 프로젝트 내에서 모든 플랫폼의 코드와 리소스를 통합하여 관리하는 단일 프로젝트 구조를 채택했다. 이로 인해 솔루션 관리가 간소화되고 빌드 설정이 훨씬 단순해졌다.
기술적 기반과 아키텍처 측면에서도 진화가 이루어졌다. Xamarin.Forms는 .NET Standard를 기반으로 했으며, 각 플랫폼의 네이티브 UI 컨트롤을 직접 렌더링하는 방식이었다. .NET MAUI는 .NET 6 이상의 통합된 .NET 플랫폼을 기반으로 하며, Xamarin.iOS와 Xamarin.Android는 각각 .NET for iOS와 .NET for Android로 재편되었다. 또한, MAUI는 호스트 빌더 패턴과 같은 현대적인 애플리케이션 시작 모델을 도입했고, 개발자 코드는 주로 MAUI의 통합 API를 통해 플랫폼 기능에 접근하도록 설계되었다.
개발자 경험과 지원 정책에서도 중요한 변화가 있다. .NET MAUI는 기본 .NET 플랫폼의 기능을 활용하여 Xamarin.Forms에서는 지원하지 않았던 핫 리로드 기능을 공식적으로 지원한다. 또한, 마이크로소프트는 2024년 이후 Xamarin에 대한 기술 지원을 종료하고 모든 새로운 크로스 플랫폼 앱 개발을 .NET MAUI로 전환할 것을 권장하고 있다. 이는 기존 Xamarin.Forms 프로젝트를 .NET MAUI로 마이그레이션할 수 있는 경로를 제공함과 동시에, 개발 생태계의 중심이 완전히 MAUI로 이동했음을 의미한다.
4. 특징 및 아키텍처
4. 특징 및 아키텍처
4.1. 단일 프로젝트 구조
4.1. 단일 프로젝트 구조
단일 프로젝트 구조는 .NET MAUI의 핵심 설계 철학 중 하나이다. 이전의 Xamarin.Forms에서는 Android, iOS, Windows 등 각 대상 플랫폼마다 별도의 프로젝트 파일을 생성하고 관리해야 했다. 반면 .NET MAUI는 하나의 프로젝트 파일(.csproj) 내에서 모든 플랫폼을 위한 코드, 리소스, 설정을 통합하여 관리한다.
이 구조는 개발 워크플로우를 크게 단순화한다. 개발자는 공유 코드를 중심으로 앱을 개발하고, 플랫폼별로 차이가 필요한 리소스(예: 아이콘, 스플래시 스크린)나 코드는 프로젝트 내의 Platforms 폴더 하위에 각 플랫폼 이름(Android, iOS, MacCatalyst, Windows)으로 구분된 디렉터리에 배치하면 된다. 빌드 시스템이 자동으로 해당 플랫폼에 맞는 파일을 선택하여 패키징한다.
단일 프로젝트의 장점은 명확하다. 솔루션의 복잡성이 감소하고 프로젝트 관리가 용이해진다. 또한 Visual Studio나 .NET CLI를 통한 빌드 및 배포 과정이 통일되어, 여러 플랫폼을 대상으로 한 빌드 명령이 간소화된다. 이는 CI/CD 파이프라인 구축 시에도 이점으로 작용한다.
이러한 구조는 Xamarin.Forms에서 .NET MAUI로의 주요 진화 중 하나로, 진정한 단일 코드베이스 크로스 플랫폼 개발 경험을 제공하는 데 기여한다. 결과적으로 개발자는 플랫폼 간의 차이보다는 앱의 핵심 비즈니스 로직과 UI 설계에 더 집중할 수 있게 된다.
4.2. 플랫폼별 렌더링
4.2. 플랫폼별 렌더링
.NET MAUI의 플랫폼별 렌더링은 개발자가 작성한 단일 사용자 인터페이스 코드를 각 대상 운영 체제의 네이티브 컨트롤로 변환하여 그리는 핵심 메커즘이다. 이는 기존 Xamarin.Forms가 각 플랫폼의 네이티브 API를 직접 호출하는 방식에서 발전한 것으로, .NET MAUI는 중간 계층인 핸들러(Handler)를 도입하여 추상화 수준을 높였다.
핸들러 아키텍처에서는 MAUI의 추상 컨트롤(예: Button)이 각 플랫폼별 핸들러(Android의 ButtonHandler, iOS의 ButtonHandler)에 매핑된다. 이 핸들러는 최종적으로 해당 플랫폼의 네이티브 뷰(Android의 AppCompatButton, iOS의 UIButton)를 생성하고 속성을 연결한다. 결과적으로 개발자는 MAUI의 공통 API만을 사용하지만, 실행 시에는 각 Windows, Android, iOS, macOS 앱이 해당 플랫폼 고유의 모양과 느낌을 그대로 유지하게 된다.
이러한 설계는 플랫폼별 맞춤 렌더링이 필요한 경우에도 유연성을 제공한다. 개발자는 특정 컨트롤의 핸들러를 완전히 재구성하거나 부분적으로 수정하는 커스텀 핸들러를 작성할 수 있다. 이를 통해 대부분의 코드는 크로스 플랫폼으로 공유하면서도, 특정 플랫폼에서만 필요한 고급 사용자 정의나 최적화를 구현하는 것이 가능해진다.
4.3. 호스트 빌더 패턴
4.3. 호스트 빌더 패턴
.NET MAUI의 호스트 빌더 패턴은 .NET 6 이상의 일반적인 호스트 모델을 기반으로 한 애플리케이션 부트스트랩 및 생명주기 관리 방식을 채택한다. 이 패턴은 애플리케이션의 시작 지점에서 MauiApp과 MauiAppBuilder를 사용하여 서비스 구성, 의존성 주입, 로깅 설정 등을 중앙 집중식으로 관리할 수 있게 한다. 기존 Xamarin.Forms의 App 클래스 중심 방식에서 진화하여, .NET Generic Host의 유연성과 확장성을 크로스 플랫폼 GUI 앱 개발에 도입한 것이 핵심이다.
이 패턴을 통해 개발자는 MauiProgram 클래스 내에서 CreateMauiApp 정적 메서드를 정의하고, MauiApp.CreateBuilder()를 호출하여 빌더를 구성한다. 이 빌더를 사용하여 앱에 필요한 서비스(예: 데이터베이스 접근 계층, 네트워킹 클라이언트)를 등록하고, 폰트 또는 앱 아이콘과 같은 리소스를 설정한 후, 최종적으로 Build() 메서드를 호출하여 애플리케이션 호스트를 생성한다. 이 구조는 웹 개발에 사용되는 ASP.NET Core의 호스트 모델과 개념적으로 유사하여, 마이크로소프트의 .NET 생태계 전반에 걸친 일관된 개발 경험을 제공한다.
호스트 빌더 패턴의 주요 장점은 애플리케이션의 초기화 코드가 체계적으로 정리되고 테스트하기 쉬워진다는 점이다. 또한, 개발 환경(개발/스테이징/프로덕션)에 따라 다른 구성을 쉽게 주입하거나, 의존성 주입 컨테이너를 활용한 모듈식 설계가 용이해진다. 이는 Windows, Android, iOS, macOS 각 플랫폼별로 특화된 설정이나 서비스 등록이 필요할 때도 일관된 인터페이스로 처리할 수 있도록 돕는다. 결과적으로, 호스트 빌더 패턴은 .NET MAUI 애플리케이션의 기반 구조를 더욱 견고하고 유지보수하기 쉽게 만드는 데 기여한다.
5. 개발 환경
5. 개발 환경
5.1. Visual Studio
5.1. Visual Studio
.NET MAUI 애플리케이션 개발의 주요 통합 개발 환경은 마이크로소프트의 Visual Studio이다. Visual Studio 2022 버전 17.3부터 .NET MAUI 개발을 공식적으로 지원하며, 이를 통해 개발자는 Windows에서 Android, iOS, macOS를 대상으로 하는 앱을 하나의 프로젝트 내에서 개발하고 디버깅할 수 있다.
Visual Studio 내에서 .NET MAUI 개발을 위해 필요한 워크로드인 ".NET Multi-platform App UI 개발"을 설치해야 한다. 이 워크로드는 .NET SDK, 플랫폼별 에뮬레이터 및 시뮬레이터 구성 도구, 필수 라이브러리 등을 포함하여 개발 환경을 한 번에 설정할 수 있게 해준다. Visual Studio의 강력한 디자이너, IntelliSense, 통합 디버거, 프로파일링 도구 등을 활용할 수 있어 생산성이 크게 향상된다.
주요 개발 기능으로는 핫 리로드가 있다. .NET MAUI는 .NET의 핫 리로드 기능을 지원하여, 앱을 다시 빌드하거나 재시작하지 않고도 코드나 XAML UI 변경 사항을 실행 중인 앱에 실시간으로 적용해볼 수 있다. 또한, Visual Studio는 연결된 Android 장치나 에뮬레이터, iOS 시뮬레이터, Windows 자체를 동시에 여러 개 선택하여 단일 빌드로 모든 대상에 배포하고 실행하는 멀티 디바이스 디버깅을 지원한다.
Visual Studio 외에도 .NET CLI(명령줄 인터페이스)를 사용하여 프로젝트 생성, 빌드, 배포 등의 작업을 수행할 수 있으며, 이는 지속적 통합 및 지속적 배포 파이프라인에 통합하거나 다른 코드 편집기(Visual Studio Code 등)와 함께 사용할 때 유용하다.
5.2. .NET CLI
5.2. .NET CLI
.NET MAUI 애플리케이션 개발은 Visual Studio와 함께 .NET CLI를 사용하여 수행할 수 있다. .NET CLI는 명령줄 인터페이스로, 개발자가 터미널이나 스크립트 환경에서 프로젝트 생성, 빌드, 실행, 게시 등의 작업을 처리할 수 있게 해준다. 이는 특히 자동화된 빌드 파이프라인이나 CI/CD 환경에서 유용하게 활용된다.
.NET MAUI 프로젝트를 CLI로 생성하려면 dotnet new maui 명령어를 사용한다. 이후 dotnet build 명령으로 애플리케이션을 빌드하고, dotnet run 명령을 통해 특정 시뮬레이터나 연결된 실제 디바이스에서 앱을 실행할 수 있다. CLI를 통한 개발은 Visual Studio Code와 같은 경량 코드 에디터를 주 개발 도구로 사용하는 개발자들에게 필수적인 환경을 제공한다.
또한 .NET CLI는 NuGet 패키지 관리, 프로젝트 구조 확인, 다양한 대상 플랫폼에 대한 게시 명령어도 지원한다. 이로 인해 .NET MAUI는 통합 개발 환경과 명령줄 도구 모두에서 강력한 개발 경험을 제공하는 것이 특징이다.
6. 컨트롤 및 레이아웃
6. 컨트롤 및 레이아웃
.NET MAUI는 Windows, Android, iOS, macOS 애플리케이션을 구축하기 위한 풍부한 컨트롤과 레이아웃 시스템을 제공한다. 개발자는 XAML 또는 C# 코드를 사용하여 사용자 인터페이스를 선언적으로 구성할 수 있으며, 버튼, 레이블, 텍스트 상자, 목록 뷰, 컬렉션 뷰와 같은 기본적인 컨트롤부터 지도, 미디어 플레이어와 같은 고급 컨트롤까지 광범위한 라이브러리를 활용할 수 있다.
레이아웃 관리는 스택 레이아�, 그리드, 플렉스 레이아웃, 절대 레이아웃과 같은 컨테이너를 통해 이루어진다. 이러한 레이아웃 컨트롤들은 자식 요소들을 다양한 방식으로 배열하고 화면 크기와 방향(반응형 디자인)에 맞게 적응하도록 돕는다. 특히 그리드는 행과 열을 정의하여 복잡한 인터페이스를 구성하는 데 유용하며, 바인딩과 스타일을 적용하여 일관된 디자인을 쉽게 유지할 수 있다.
컨트롤의 모양과 동작은 플랫폼 간에 일관되게 유지되도록 설계되었지만, 필요에 따라 핸들러를 통해 각 운영 체제의 네이티브 뷰로 매핑되는 방식을 사용자 정의할 수 있다. 이는 특정 플랫폼에서만 필요한 사용자 정의 렌더링이나 성능 최적화를 가능하게 한다. 또한 시각 상태 관리자를 사용하면 화면 크기나 기기 방향과 같은 조건에 따라 컨트롤의 시각적 상태를 동적으로 변경할 수 있다.
7. 장단점
7. 장단점
.NET MAUI의 주요 장점은 단일 코드베이스를 사용하여 Windows, Android, iOS, macOS 애플리케이션을 개발할 수 있다는 점이다. 이는 개발 및 유지보수 비용을 크게 절감시킨다. 또한 .NET 생태계의 강력한 라이브러리와 C# 언어를 그대로 활용할 수 있으며, Visual Studio와의 긴밀한 통합으로 생산성 높은 개발 환경을 제공한다. 특히 핫 리로드 기능을 지원하여 코드 수정 사항을 앱을 재시작하지 않고도 즉시 확인할 수 있어 개발 속도를 향상시킨다.
단점으로는 2022년 정식 릴리스 이후에도 상대적으로 불안정한 부분이 지적된다. 일부 컨트롤의 렌더링 문제나 플랫폼별 특이성으로 인한 버그가 보고되며, 특히 초기 버전에서는 Xamarin.Forms에 비해 성숙도가 떨어진다는 평가를 받았다. 또한 플랫폼별 네이티브 기능을 최대한 활용하려면 여전히 플랫폼 특정 코드를 작성해야 하는 경우가 있어, 진정한 "한 번 작성, 어디서나 실행"의 이상에 완전히 도달했다고 보기 어렵다.
프레임워크의 아키텍처 상, MAUI API를 통해 대부분의 기능에 접근하도록 설계되어 있지만, 복잡하거나 최신의 네이티브 기능을 사용할 때는 추가적인 작업이 필요할 수 있다. 이는 학습 곡선을 더 가파르게 만들거나 개발 시간을 증가시킬 수 있는 요소이다. 마이크로소프트는 지속적인 업데이트를 통해 이러한 문제점들을 해결하고 있지만, 기존의 안정적인 네이티브 프레임워크나 다른 경쟁 크로스 플랫폼 솔루션에 비해 아직 성숙 단계에 있다고 평가받는다.
